package com.qdxwx.data.service.user;

import com.qdxwx.common.page.PageRequest;
import com.qdxwx.models.enums.LetterTemplate;
import com.qdxwx.models.user.User;
import com.qdxwx.models.user.UserLetter;

import java.time.LocalDateTime;
import java.util.List;

/**
 * Qdx NetSchool Platform
 * @author qdxwx
 * @updateTime 2022/5/25
 * @description
 */
public interface UserLetterService {
    
    int insert(UserLetter userLetter);

    int delete(long id, long userId);

    int delete(UserLetter userLetter);
    /**
     * 删除站内信过期消息
     */
    int deletePast(LocalDateTime lastTime);

    int updateRead(UserLetter userLetter);

    int updateRead(long id);

    /*通过id查询消息*/
    UserLetter get(long id);

    /**
     * 查询站内信收件箱
     *
     * @param userLetter 站内信实体
     * @return List<UserLetter> 站内信收件箱List
     */
    List<UserLetter> getList(UserLetter userLetter, PageRequest page);

    int count(UserLetter userLetter);

    /**
     * 查询站内信收件箱
     */
    List<UserLetter> getUserInbox(User user, PageRequest page);
     /**
     * 仅发送站内短信
     * @param userId 用户id
     * @param letterTemplate 短信模板（包含标题，内容，短信id）
     * @param params 短信参数
     * @return 是否成功
     */
    int send(long userId, LetterTemplate letterTemplate, String... params);
    /**
     * 仅发送站内短信
     * @param userId 用户id
     * @param title 短信标题
     * @param content 短信内容
     * @return 是否成功
     */
    int send(long userId, String title, String content);
    /**
     * 仅发送站内短信
     * @param userId 用户id
     * @param title 短信标题
     * @param content 短信内容
     * @param sender 发信人
     * @return 是否成功
     */
    int send(long userId, String title, String content, User sender);
    /*
     *给明天有课程或优惠券过期的用户发送给消息
     */
    void timeOverMsg();

    int updateCombine(long userId1, long userId2);
}
